package com.web.struts2;

import java.io.Serializable;
import java.util.List;

import com.opensymphony.xwork2.Preparable;

/**
 * Struts2中CRUD典型Action规范类.
 * 
 * @param <T>
 *            CRUD所管理的对象类型
 * 
 * @author san
 */
@SuppressWarnings("serial")
public abstract class CRUDSupportAction extends BaseSupportAction implements Preparable {
	/**
	 * 进行CUD操作后,以redirect方式重新打开action默认页的result名.
	 */
	public static final String RELOAD = "reload";

	public static final int pageCount = 10;

	public List<Serializable> ids;

	public String id;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public List<Serializable> getIds() {
		return ids;
	}

	public void setIds(List<Serializable> ids) {
		this.ids = ids;
	}

	/**
	 * Action函数,默认action函数，默认指向list函数.
	 */
	@Override
	public String execute() throws Exception {
		return list();
	}

	/**
	 * Action函数,显示Entity列表. return SUCCESS.
	 */
	public abstract String list() throws Exception;

	public abstract String input() throws Exception;

	/**
	 * Action函数,新增或修改Entity. return RELOAD.
	 */
	public abstract String save() throws Exception;

	/**
	 * Action函数,删除Entity. return RELOAD.
	 */
	public abstract String delete() throws Exception;

	// -- Preparable函数 --//
	/**
	 * 实现空的prepare()函数,屏蔽所有Action函数公共的二次绑定.
	 */
	public void prepare() throws Exception {
	}

	/**
	 * 在input()前执行二次绑定.
	 */
	public void prepareInput() throws Exception {
		prepareModel();
	}

	/**
	 * 在save()前执行二次绑定.
	 */
	public void prepareSave() throws Exception {
		prepareModel();
	}

	/**
	 * 等同于prepare()的内部函数,供prepardMethodName()函数调用.
	 */
	protected abstract void prepareModel() throws Exception;
}
